/** 
 * Copyright (c) 2015 committers of YAKINDU and others. 
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Eclipse Public License v1.0 
 * which accompanies this distribution, and is available at 
 * http://www.eclipse.org/legal/epl-v10.html 
 * Contributors:
 * committers of YAKINDU - initial API and implementation
 *
*/
package org.yakindu.base.expressions.expressions.provider;

import java.util.ArrayList;
import java.util.Collection;

import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.edit.provider.ChangeNotifier;
import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.IChangeNotifier;
import org.eclipse.emf.edit.provider.IDisposable;
import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
import org.eclipse.emf.edit.provider.IItemPropertySource;
import org.eclipse.emf.edit.provider.INotifyChangedListener;
import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
import org.yakindu.base.expressions.expressions.util.ExpressionsAdapterFactory;

/**
 * This is the factory that is used to provide the interfaces needed to support Viewers.
 * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
 * The adapters also support Eclipse property sheets.
 * Note that most of the adapters are shared among multiple instances.
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated
 */
public class ExpressionsItemProviderAdapterFactory extends ExpressionsAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
	/**
	 * This keeps track of the root adapter factory that delegates to this adapter factory.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ComposedAdapterFactory parentAdapterFactory;

	/**
	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected IChangeNotifier changeNotifier = new ChangeNotifier();

	/**
	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected Collection<Object> supportedTypes = new ArrayList<Object>();

	/**
	 * This constructs an instance.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ExpressionsItemProviderAdapterFactory() {
		supportedTypes.add(IEditingDomainItemProvider.class);
		supportedTypes.add(IStructuredItemContentProvider.class);
		supportedTypes.add(ITreeItemContentProvider.class);
		supportedTypes.add(IItemLabelProvider.class);
		supportedTypes.add(IItemPropertySource.class);
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.BoolLiteral} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected BoolLiteralItemProvider boolLiteralItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.BoolLiteral}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createBoolLiteralAdapter() {
		if (boolLiteralItemProvider == null) {
			boolLiteralItemProvider = new BoolLiteralItemProvider(this);
		}

		return boolLiteralItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.IntLiteral} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected IntLiteralItemProvider intLiteralItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.IntLiteral}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createIntLiteralAdapter() {
		if (intLiteralItemProvider == null) {
			intLiteralItemProvider = new IntLiteralItemProvider(this);
		}

		return intLiteralItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.DoubleLiteral} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected DoubleLiteralItemProvider doubleLiteralItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.DoubleLiteral}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createDoubleLiteralAdapter() {
		if (doubleLiteralItemProvider == null) {
			doubleLiteralItemProvider = new DoubleLiteralItemProvider(this);
		}

		return doubleLiteralItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.FloatLiteral} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected FloatLiteralItemProvider floatLiteralItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.FloatLiteral}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createFloatLiteralAdapter() {
		if (floatLiteralItemProvider == null) {
			floatLiteralItemProvider = new FloatLiteralItemProvider(this);
		}

		return floatLiteralItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.HexLiteral} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected HexLiteralItemProvider hexLiteralItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.HexLiteral}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createHexLiteralAdapter() {
		if (hexLiteralItemProvider == null) {
			hexLiteralItemProvider = new HexLiteralItemProvider(this);
		}

		return hexLiteralItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.BinaryLiteral} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected BinaryLiteralItemProvider binaryLiteralItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.BinaryLiteral}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createBinaryLiteralAdapter() {
		if (binaryLiteralItemProvider == null) {
			binaryLiteralItemProvider = new BinaryLiteralItemProvider(this);
		}

		return binaryLiteralItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.StringLiteral} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected StringLiteralItemProvider stringLiteralItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.StringLiteral}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createStringLiteralAdapter() {
		if (stringLiteralItemProvider == null) {
			stringLiteralItemProvider = new StringLiteralItemProvider(this);
		}

		return stringLiteralItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.NullLiteral} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected NullLiteralItemProvider nullLiteralItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.NullLiteral}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createNullLiteralAdapter() {
		if (nullLiteralItemProvider == null) {
			nullLiteralItemProvider = new NullLiteralItemProvider(this);
		}

		return nullLiteralItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.AssignmentExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected AssignmentExpressionItemProvider assignmentExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.AssignmentExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createAssignmentExpressionAdapter() {
		if (assignmentExpressionItemProvider == null) {
			assignmentExpressionItemProvider = new AssignmentExpressionItemProvider(this);
		}

		return assignmentExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.ConditionalExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ConditionalExpressionItemProvider conditionalExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.ConditionalExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createConditionalExpressionAdapter() {
		if (conditionalExpressionItemProvider == null) {
			conditionalExpressionItemProvider = new ConditionalExpressionItemProvider(this);
		}

		return conditionalExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.LogicalOrExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected LogicalOrExpressionItemProvider logicalOrExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.LogicalOrExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createLogicalOrExpressionAdapter() {
		if (logicalOrExpressionItemProvider == null) {
			logicalOrExpressionItemProvider = new LogicalOrExpressionItemProvider(this);
		}

		return logicalOrExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.LogicalAndExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected LogicalAndExpressionItemProvider logicalAndExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.LogicalAndExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createLogicalAndExpressionAdapter() {
		if (logicalAndExpressionItemProvider == null) {
			logicalAndExpressionItemProvider = new LogicalAndExpressionItemProvider(this);
		}

		return logicalAndExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.LogicalNotExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected LogicalNotExpressionItemProvider logicalNotExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.LogicalNotExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createLogicalNotExpressionAdapter() {
		if (logicalNotExpressionItemProvider == null) {
			logicalNotExpressionItemProvider = new LogicalNotExpressionItemProvider(this);
		}

		return logicalNotExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.BitwiseXorExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected BitwiseXorExpressionItemProvider bitwiseXorExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.BitwiseXorExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createBitwiseXorExpressionAdapter() {
		if (bitwiseXorExpressionItemProvider == null) {
			bitwiseXorExpressionItemProvider = new BitwiseXorExpressionItemProvider(this);
		}

		return bitwiseXorExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.BitwiseOrExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected BitwiseOrExpressionItemProvider bitwiseOrExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.BitwiseOrExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createBitwiseOrExpressionAdapter() {
		if (bitwiseOrExpressionItemProvider == null) {
			bitwiseOrExpressionItemProvider = new BitwiseOrExpressionItemProvider(this);
		}

		return bitwiseOrExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.BitwiseAndExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected BitwiseAndExpressionItemProvider bitwiseAndExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.BitwiseAndExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createBitwiseAndExpressionAdapter() {
		if (bitwiseAndExpressionItemProvider == null) {
			bitwiseAndExpressionItemProvider = new BitwiseAndExpressionItemProvider(this);
		}

		return bitwiseAndExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.LogicalRelationExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected LogicalRelationExpressionItemProvider logicalRelationExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.LogicalRelationExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createLogicalRelationExpressionAdapter() {
		if (logicalRelationExpressionItemProvider == null) {
			logicalRelationExpressionItemProvider = new LogicalRelationExpressionItemProvider(this);
		}

		return logicalRelationExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.ShiftExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ShiftExpressionItemProvider shiftExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.ShiftExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createShiftExpressionAdapter() {
		if (shiftExpressionItemProvider == null) {
			shiftExpressionItemProvider = new ShiftExpressionItemProvider(this);
		}

		return shiftExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.NumericalAddSubtractExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected NumericalAddSubtractExpressionItemProvider numericalAddSubtractExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.NumericalAddSubtractExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createNumericalAddSubtractExpressionAdapter() {
		if (numericalAddSubtractExpressionItemProvider == null) {
			numericalAddSubtractExpressionItemProvider = new NumericalAddSubtractExpressionItemProvider(this);
		}

		return numericalAddSubtractExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.NumericalMultiplyDivideExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected NumericalMultiplyDivideExpressionItemProvider numericalMultiplyDivideExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.NumericalMultiplyDivideExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createNumericalMultiplyDivideExpressionAdapter() {
		if (numericalMultiplyDivideExpressionItemProvider == null) {
			numericalMultiplyDivideExpressionItemProvider = new NumericalMultiplyDivideExpressionItemProvider(this);
		}

		return numericalMultiplyDivideExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.NumericalUnaryExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected NumericalUnaryExpressionItemProvider numericalUnaryExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.NumericalUnaryExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createNumericalUnaryExpressionAdapter() {
		if (numericalUnaryExpressionItemProvider == null) {
			numericalUnaryExpressionItemProvider = new NumericalUnaryExpressionItemProvider(this);
		}

		return numericalUnaryExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.PostFixUnaryExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected PostFixUnaryExpressionItemProvider postFixUnaryExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.PostFixUnaryExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createPostFixUnaryExpressionAdapter() {
		if (postFixUnaryExpressionItemProvider == null) {
			postFixUnaryExpressionItemProvider = new PostFixUnaryExpressionItemProvider(this);
		}

		return postFixUnaryExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.PrimitiveValueExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected PrimitiveValueExpressionItemProvider primitiveValueExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.PrimitiveValueExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createPrimitiveValueExpressionAdapter() {
		if (primitiveValueExpressionItemProvider == null) {
			primitiveValueExpressionItemProvider = new PrimitiveValueExpressionItemProvider(this);
		}

		return primitiveValueExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.FeatureCall} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected FeatureCallItemProvider featureCallItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.FeatureCall}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createFeatureCallAdapter() {
		if (featureCallItemProvider == null) {
			featureCallItemProvider = new FeatureCallItemProvider(this);
		}

		return featureCallItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.MetaCall} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected MetaCallItemProvider metaCallItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.MetaCall}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createMetaCallAdapter() {
		if (metaCallItemProvider == null) {
			metaCallItemProvider = new MetaCallItemProvider(this);
		}

		return metaCallItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.ElementReferenceExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ElementReferenceExpressionItemProvider elementReferenceExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.ElementReferenceExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createElementReferenceExpressionAdapter() {
		if (elementReferenceExpressionItemProvider == null) {
			elementReferenceExpressionItemProvider = new ElementReferenceExpressionItemProvider(this);
		}

		return elementReferenceExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.ParenthesizedExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ParenthesizedExpressionItemProvider parenthesizedExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.ParenthesizedExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createParenthesizedExpressionAdapter() {
		if (parenthesizedExpressionItemProvider == null) {
			parenthesizedExpressionItemProvider = new ParenthesizedExpressionItemProvider(this);
		}

		return parenthesizedExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.TypeCastExpression} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected TypeCastExpressionItemProvider typeCastExpressionItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.TypeCastExpression}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createTypeCastExpressionAdapter() {
		if (typeCastExpressionItemProvider == null) {
			typeCastExpressionItemProvider = new TypeCastExpressionItemProvider(this);
		}

		return typeCastExpressionItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link org.yakindu.base.expressions.expressions.Argument} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ArgumentItemProvider argumentItemProvider;

	/**
	 * This creates an adapter for a {@link org.yakindu.base.expressions.expressions.Argument}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createArgumentAdapter() {
		if (argumentItemProvider == null) {
			argumentItemProvider = new ArgumentItemProvider(this);
		}

		return argumentItemProvider;
	}

	/**
	 * This returns the root adapter factory that contains this factory.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public ComposeableAdapterFactory getRootAdapterFactory() {
		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
	}

	/**
	 * This sets the composed adapter factory that contains this factory.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
		this.parentAdapterFactory = parentAdapterFactory;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public boolean isFactoryForType(Object type) {
		return supportedTypes.contains(type) || super.isFactoryForType(type);
	}

	/**
	 * This implementation substitutes the factory itself as the key for the adapter.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter adapt(Notifier notifier, Object type) {
		return super.adapt(notifier, this);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Object adapt(Object object, Object type) {
		if (isFactoryForType(type)) {
			Object adapter = super.adapt(object, type);
			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
				return adapter;
			}
		}

		return null;
	}

	/**
	 * This adds a listener.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void addListener(INotifyChangedListener notifyChangedListener) {
		changeNotifier.addListener(notifyChangedListener);
	}

	/**
	 * This removes a listener.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void removeListener(INotifyChangedListener notifyChangedListener) {
		changeNotifier.removeListener(notifyChangedListener);
	}

	/**
	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void fireNotifyChanged(Notification notification) {
		changeNotifier.fireNotifyChanged(notification);

		if (parentAdapterFactory != null) {
			parentAdapterFactory.fireNotifyChanged(notification);
		}
	}

	/**
	 * This disposes all of the item providers created by this factory. 
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void dispose() {
		if (boolLiteralItemProvider != null) boolLiteralItemProvider.dispose();
		if (intLiteralItemProvider != null) intLiteralItemProvider.dispose();
		if (doubleLiteralItemProvider != null) doubleLiteralItemProvider.dispose();
		if (floatLiteralItemProvider != null) floatLiteralItemProvider.dispose();
		if (hexLiteralItemProvider != null) hexLiteralItemProvider.dispose();
		if (binaryLiteralItemProvider != null) binaryLiteralItemProvider.dispose();
		if (stringLiteralItemProvider != null) stringLiteralItemProvider.dispose();
		if (nullLiteralItemProvider != null) nullLiteralItemProvider.dispose();
		if (assignmentExpressionItemProvider != null) assignmentExpressionItemProvider.dispose();
		if (conditionalExpressionItemProvider != null) conditionalExpressionItemProvider.dispose();
		if (logicalOrExpressionItemProvider != null) logicalOrExpressionItemProvider.dispose();
		if (logicalAndExpressionItemProvider != null) logicalAndExpressionItemProvider.dispose();
		if (logicalNotExpressionItemProvider != null) logicalNotExpressionItemProvider.dispose();
		if (bitwiseXorExpressionItemProvider != null) bitwiseXorExpressionItemProvider.dispose();
		if (bitwiseOrExpressionItemProvider != null) bitwiseOrExpressionItemProvider.dispose();
		if (bitwiseAndExpressionItemProvider != null) bitwiseAndExpressionItemProvider.dispose();
		if (logicalRelationExpressionItemProvider != null) logicalRelationExpressionItemProvider.dispose();
		if (shiftExpressionItemProvider != null) shiftExpressionItemProvider.dispose();
		if (numericalAddSubtractExpressionItemProvider != null) numericalAddSubtractExpressionItemProvider.dispose();
		if (numericalMultiplyDivideExpressionItemProvider != null) numericalMultiplyDivideExpressionItemProvider.dispose();
		if (numericalUnaryExpressionItemProvider != null) numericalUnaryExpressionItemProvider.dispose();
		if (postFixUnaryExpressionItemProvider != null) postFixUnaryExpressionItemProvider.dispose();
		if (primitiveValueExpressionItemProvider != null) primitiveValueExpressionItemProvider.dispose();
		if (featureCallItemProvider != null) featureCallItemProvider.dispose();
		if (metaCallItemProvider != null) metaCallItemProvider.dispose();
		if (elementReferenceExpressionItemProvider != null) elementReferenceExpressionItemProvider.dispose();
		if (parenthesizedExpressionItemProvider != null) parenthesizedExpressionItemProvider.dispose();
		if (typeCastExpressionItemProvider != null) typeCastExpressionItemProvider.dispose();
		if (argumentItemProvider != null) argumentItemProvider.dispose();
	}

}
